from django.db import models

# Create your models here.
"""
1. 模型类要继承自models.model
2. 定义属性
    id 系统默认会生成
    属性名=models.类型（选项）
        
        2.1 属性名 对应 就是字段名
            不要使用 python等关键字
            不要使用连续下划线_
        2.2 类型 Mysql的类型
        2.3 选项
3. 改变表的名称
    默认表的名称时 ： 子应用名_类名 都是小写
    修改表名字
create table 'qq_user'(
    id int,
    name varchar(10) not null default ''
)
"""


class BookInfo(models.Model):
    name = models.CharField(max_length=20, verbose_name='名称')
    pub_date = models.DateField(verbose_name='发布日期', null=True)
    readcount = models.IntegerField(default=0, verbose_name='阅读量')
    commentcount = models.IntegerField(default=0, verbose_name='评论量')
    is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')
    
    #1对多的关联模型中
    #系统会自动添加一个
    # peopleinfo_set=[PeopleInfo,PeopleInfo,....]
    class Meta:
        db_table = 'bookinfo'  # 修改表名字
        verbose_name = '图书'  # admin站点使用的

    def __str__(self):
        """定义每个数据对象的显示信息"""
        return self.name


# 准备人物列表信息的模型类
class PeopleInfo(models.Model):

    GENDER_CHOICES = (
        (0, 'male'),
        (1, 'female')
    )
    name = models.CharField(max_length=20, verbose_name='名称')
    gender = models.SmallIntegerField(choices=GENDER_CHOICES, default=0, verbose_name='性别')
    description = models.CharField(max_length=200, null=True, verbose_name='描述信息')
    book = models.ForeignKey(BookInfo, on_delete=models.CASCADE, verbose_name='图书')  # 外键
    is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')
    # 外键
    # 系统会自动给外键添加_id
    #
    # 外键的级联操作
    # 主表 和 从表
    # 1  对 多
    # 书籍   对   人物
    #
    # 主表的一条数据 如果删除了
    # 从表有关联的数据，关联的数据怎么办呢？？
    # SET_NULL
    # 抛出异常，不让删除
    # 级联删除

    class Meta:
        db_table = 'peopleinfo'
        verbose_name = '人物信息'

    def __str__(self):
        return self.name
